package jp.co.dailyReport.expense.action;

import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForward;
import org.apache.struts.validator.DynaValidatorForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import jp.co.dailyReport.DataUnavailableException;
import jp.co.dailyReport.project.Project;
import jp.co.dailyReport.project.ProjectManager;
import jp.co.dailyReport.workItem.WorkItem;
import jp.co.dailyReport.workItem.WorkItemManager;
import jp.co.dailyReport.Utilities;

/**
 * ﾒﾆｭｰページのﾌﾟﾛｼﾞｪｸﾄ単価設定リンク、
 * ﾌﾟﾛｼﾞｪｸﾄ単価設定ページの「設定」ボタン
 * が押されたときの処理を管理するクラスです。
 */
public class ExpenseProjectSelectAction extends Action {

	private static Logger log = Logger.getLogger(ExpenseProjectSelectAction.class);

	/**
	 * ﾒﾆｭｰページのﾌﾟﾛｼﾞｪｸﾄ単価設定リンク、ﾌﾟﾛｼﾞｪｸﾄ単価設定ページの「設定」ボタン
	 * が押されたときの処理を行います。<BR>
	 * 入力チェックを実行し、OKならば作業項目情報をセッションから取得し、DB更新を行います。<BR>
	 * 作業項目情報をセッションから削除し、プロジェクト情報を取得します。
	 * 
	 * @param mapping このインスタンスを選択するために使用したActionMapping
	 * @param form 存在するならば、このリクエストのためのActionForm Bean
	 * @param request 処理しているHTTPリクエスト
	 * @param response 処理しているHTTPレスポンス
	 * @return ActionForwardインスタンス
	 * @throws IOException, ServletException
	 */
	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
		 throws IOException, ServletException {

		log.debug("ExpenseProjectSelectAction start");
		HttpSession session = request.getSession();
		DynaValidatorForm expenseManufacturingProjectActionForm = (DynaValidatorForm)form;
		ActionErrors errors = new ActionErrors();
		String target = "select";

		Project[] projectList = null;
		try {
			if(((String)expenseManufacturingProjectActionForm.get("set")).length()!=0){
				WorkItem[] workItemList = (WorkItem[])session.getAttribute("workItemList");
				for(int i=0;i<workItemList.length;i++){
					if(Utilities.isNumber(request.getParameter("workItemList[" + i + "].unitPrice"),"int")){
						workItemList[i].setUnitPrice(Integer.parseInt(request.getParameter("workItemList[" + i + "].unitPrice")));
						WorkItemManager.update(workItemList[i]);
					}else{
						errors.add("unitPrice" + i,new ActionError("errors.unitPrice.int"));
					}
				}
			}
			session.removeAttribute("workItemList");
			projectList = ProjectManager.load();
		} catch(DataUnavailableException due) {
			log.error(due.getMessage());
		}
		request.setAttribute("projectList", projectList);

		if (!errors.isEmpty()){
			target = "setunitcost";
			saveErrors(request,errors);
		}


		log.debug("ExpenseProjectSelectAction end");
		return mapping.findForward(target);
	}
}
